Definition

Let f:{0,1}∗→{0,1}∗f : \{0,1\}^* \to \{0,1\}^* and let T:ℕ→ℕT: \mathbb{N} \to \mathbb{N} be some functions, and let MM be a Turing machine. Say that MM computes ff if for every x∈{0,1}∗x \in \{0,1\}^*, when MM is initialized to start configuration on input xx, it halts with f(x)f(x) written on its output tape. Say MM computes ff in T(n)T(n)-time if its computation on every input xx requires at most T(|x|)T(\lvert x \rvert) steps.

A function T:ℕ→ℕT: \mathbb{N} \to \mathbb{N} is time-constructible if T(n)≥nT(n) \geq n and there is a TM MM that computes the function x↦⌞T(|x|)⌟x \mapsto \llcorner T(\lvert x\rvert ) \lrcorner in time T(n)T(n). (where ⌞T(|x|)⌟\llcorner T(\lvert x\rvert ) \lrcorner denotes binary representation of number T(|x|)T(\lvert x\rvert ))

Notes

  • this is about runtime!
  • |x||x| denotes the length of the string representing xx here

References

  1. S. Arora, B. Barak. Computational Complexity: A Modern Approach, Cambridge University Press, 2009, pp. 1, 15-16.